/******************************************************************************* * Signavio Core Components * Copyright (C) 2012 Signavio GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package de.hpi.bpmn2_0.factory.node; import org.oryxeditor.server.diagram.generic.GenericShape; import de.hpi.bpmn2_0.annotations.StencilId; import de.hpi.bpmn2_0.exceptions.BpmnConverterException; import de.hpi.bpmn2_0.factory.AbstractShapeFactory; import de.hpi.bpmn2_0.model.FormalExpression; import de.hpi.bpmn2_0.model.activity.Task; import de.hpi.bpmn2_0.model.activity.misc.Operation; import de.hpi.bpmn2_0.model.data_object.Message; import de.hpi.bpmn2_0.model.event.CancelEventDefinition; import de.hpi.bpmn2_0.model.event.CompensateEventDefinition; import de.hpi.bpmn2_0.model.event.ConditionalEventDefinition; import de.hpi.bpmn2_0.model.event.ErrorEventDefinition; import de.hpi.bpmn2_0.model.event.Escalation; import de.hpi.bpmn2_0.model.event.EscalationEventDefinition; import de.hpi.bpmn2_0.model.event.MessageEventDefinition; import de.hpi.bpmn2_0.model.event.SignalEventDefinition; import de.hpi.bpmn2_0.model.event.StartEvent; import de.hpi.bpmn2_0.model.event.TerminateEventDefinition; import de.hpi.bpmn2_0.model.event.TimerEventDefinition; import de.hpi.bpmn2_0.model.misc.Error; import de.hpi.bpmn2_0.model.misc.Signal; import de.hpi.diagram.SignavioUUID; /** * The factory for start events * * @author Sven Wagner-Boysen * */ @StencilId({ "StartNoneEvent", "StartTimerEvent", "StartEscalationEvent", "StartConditionalEvent", "StartErrorEvent", "StartCompensationEvent", "StartSignalEvent", "StartMultipleEvent", "StartParallelMultipleEvent", "StartMessageEvent" }) public class StartEventFactory extends AbstractShapeFactory { /* (non-Javadoc) * @see de.hpi.bpmn2_0.factory.AbstractBpmnFactory#createProcessElement(org.oryxeditor.server.diagram.Shape) */ // @Override protected StartEvent createProcessElement(GenericShape shape) throws BpmnConverterException { StartEvent event; try { event = (StartEvent) this.invokeCreatorMethod(shape); } catch (Exception e) { /* Wrap exceptions into specific BPMNConverterException */ throw new BpmnConverterException( "Error while creating the process element of " + shape.getStencilId(), e); } event.setId(shape.getResourceId()); event.setName(shape.getProperty("name")); /* Interrupting property */ String interrupting = shape.getProperty("isinterrupting"); if(interrupting != null) event.setIsInterrupting(!interrupting.equalsIgnoreCase("false")); return event; } /* Creator methods for different event definitions */ @StencilId("StartMessageEvent") public StartEvent createStartMessageEvent(GenericShape shape) { StartEvent event = new StartEvent(); MessageEventDefinition msgEvDef = new MessageEventDefinition(); /* Message name */ String messageName = shape.getProperty("messagename"); if(messageName != null && !(messageName.length() == 0)) { Message message = new Message(); message.setName(messageName); msgEvDef.setMessageRef(message); } /* Operation name */ String operationName = shape.getProperty("operationname"); if(operationName != null && !(operationName.length() == 0)) { Operation operation = new Operation(); operation.setName(operationName); msgEvDef.setOperationRef(operation); } event.getEventDefinition().add(msgEvDef); return event; } @StencilId("StartNoneEvent") public StartEvent createStartNoneEvent(GenericShape shape) { StartEvent event = new StartEvent(); return event; } @StencilId("StartTimerEvent") public StartEvent createStartTimerEvent(GenericShape shape) { StartEvent event = new StartEvent(); TimerEventDefinition evDef = new TimerEventDefinition(); /* Time Date */ String timeDate = shape.getProperty("timedate"); if(timeDate != null && !(timeDate.length() == 0)) { FormalExpression expr = new FormalExpression(timeDate); evDef.setTimeDate(expr); } /* Time Cycle */ String timeCycle = shape.getProperty("timecycle"); if(timeCycle != null && !(timeCycle.length() == 0)) { FormalExpression expr = new FormalExpression(timeCycle); evDef.setTimeCycle(expr); } /* Time Duration */ String timeDuration = shape.getProperty("timeduration"); if(timeDuration != null && !(timeDuration.length() == 0)) { FormalExpression expr = new FormalExpression(timeDuration); evDef.setTimeDuration(expr); } event.getEventDefinition().add(evDef); return event; } @StencilId("StartEscalationEvent") public StartEvent createStartEscalationEvent(GenericShape shape) { StartEvent event = new StartEvent(); EscalationEventDefinition evDef = new EscalationEventDefinition(); Escalation escalation = new Escalation(); /* Escalation name */ String escalationName = shape.getProperty("escalationname"); if(escalationName != null && !(escalationName.length() == 0)) { escalation.setName(escalationName); } /* Escalation code */ String escalationCode = shape.getProperty("escalationcode"); if(escalationCode != null && !(escalationCode.length() == 0)) { escalation.setEscalationCode(escalationCode); } evDef.setEscalationRef(escalation); event.getEventDefinition().add(evDef); return event; } @StencilId("StartConditionalEvent") public StartEvent createStartConditionalEvent(GenericShape shape) { StartEvent event = new StartEvent(); ConditionalEventDefinition evDef = new ConditionalEventDefinition(); /* Set condition attribute as FormalExpression */ String condition = shape.getProperty("condition"); if(condition != null && !(condition.length() == 0)) evDef.setCondition(new FormalExpression(condition)); event.getEventDefinition().add(evDef); return event; } @StencilId("StartErrorEvent") public StartEvent createStartErrorEvent(GenericShape shape) { StartEvent event = new StartEvent(); ErrorEventDefinition evDef = new ErrorEventDefinition(); Error error = new Error(); /* Error name */ String errorName = shape.getProperty("errorname"); if(errorName != null && !(errorName.length() == 0)) { error.setName(errorName); } /* Error code */ String errorCode = shape.getProperty("errorcode"); if(errorCode != null && !(errorCode.length() == 0)) { error.setErrorCode(errorCode); } evDef.setErrorRef(error); event.getEventDefinition().add(evDef); return event; } @StencilId("StartCompensationEvent") public StartEvent createStartCompensateEvent(GenericShape shape) { StartEvent event = new StartEvent(); CompensateEventDefinition evDef = new CompensateEventDefinition(); /* Activity Reference */ String activityRef = shape.getProperty("activityref"); if(activityRef != null && !(activityRef.length() == 0)) { Task taskRef = new Task(); taskRef.setId(activityRef); evDef.setActivityRef(taskRef); } /* Wait for Completion */ String waitForCompletion = shape.getProperty("waitforcompletion"); if(waitForCompletion != null && waitForCompletion.equals("false")) { evDef.setWaitForCompletion(false); } else { evDef.setWaitForCompletion(true); } event.getEventDefinition().add(evDef); return event; } @StencilId("StartSignalEvent") public StartEvent createStartSignalEvent(GenericShape shape) { StartEvent event = new StartEvent(); SignalEventDefinition evDef = new SignalEventDefinition(); Signal signal = new Signal(); /* Signal ID */ signal.setId(SignavioUUID.generate()); /* Signal name */ String signalName = shape.getProperty("signalname"); if(signalName != null && !(signalName.length() == 0)) { signal.setName(signalName); } evDef.setSignalRef(signal); event.getEventDefinition().add(evDef); return event; } @StencilId("StartMultipleEvent") public StartEvent createStartMultipleEvent(GenericShape shape) { StartEvent event = new StartEvent(); event.getEventDefinition().add(new CancelEventDefinition()); event.getEventDefinition().add(new TerminateEventDefinition()); return event; } @StencilId("StartParallelMultipleEvent") public StartEvent createStartParallelMultipleEvent(GenericShape shape) { StartEvent event = new StartEvent(); event.getEventDefinition().add(new CancelEventDefinition()); event.getEventDefinition().add(new TerminateEventDefinition()); event.setParallelMultiple(true); return event; } }